home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 684 / 684.xpi / chrome / fireftp.jar / content / js / etc / UIUpdate.js < prev   
Text File  |  2009-09-27  |  8KB  |  183 lines

  1. window.setInterval("UIUpdate()", 500);                                             // update once a second
  2.  
  3. function UIUpdate() {
  4.   if (gLogQueue && gLogMode) {
  5.     var scrollLog = gCmdlogBody.scrollTop + 50 >= gCmdlogBody.scrollHeight - gCmdlogBody.clientHeight;
  6.     gCmdlogBody.innerHTML += gLogQueue;                                             // update log
  7.  
  8.     gLogQueue = "";
  9.  
  10.     var nodeList = gCmdlogDoc.getElementsByTagName("div");                          // don't keep too much log data or it will slow down things
  11.     var count    = 0;
  12.     while (nodeList.length > 200 + count) {
  13.       if (nodeList.item(count).getAttribute("type") == 'error') {
  14.         ++count;
  15.       } else {
  16.         gCmdlogBody.removeChild(nodeList.item(count));
  17.       }
  18.     }
  19.  
  20.     if (scrollLog) {
  21.       gCmdlogBody.scrollTop = gCmdlogBody.scrollHeight - gCmdlogBody.clientHeight;  // scroll to bottom
  22.     }
  23.   }
  24.  
  25.   queueTree.updateView();                                                           // update queue
  26.  
  27.   var bytesTotal;                                                                   // update status bar
  28.   var bytesTransferred;
  29.   var bytesPartial;
  30.   var timeStart;
  31.  
  32.   for (var x = 0; x < gMaxCon; ++x) {
  33.     if (!gConnections[x].isConnected) {
  34.       continue;
  35.     }
  36.  
  37.     if (gConnections[x].dataSocket && gConnections[x].dataSocket.progressEventSink.bytesTotal && !gConnections[x].dataSocket.progressEventSink.compressStream) {
  38.       bytesTotal       = gConnections[x].dataSocket.progressEventSink.bytesTotal;
  39.       bytesTransferred = gConnections[x].dataSocket.progressEventSink.bytesUploaded;
  40.       bytesPartial     = gConnections[x].dataSocket.progressEventSink.bytesPartial;
  41.       timeStart        = gConnections[x].dataSocket.progressEventSink.timeStart;
  42.       break;
  43.     } else if (gConnections[x].dataSocket && gConnections[x].dataSocket.dataListener.bytesTotal) {
  44.       bytesTotal       = gConnections[x].dataSocket.dataListener.bytesTotal;
  45.       bytesTransferred = gConnections[x].dataSocket.dataListener.bytesDownloaded;
  46.       bytesPartial     = gConnections[x].dataSocket.dataListener.bytesPartial;
  47.       timeStart        = gConnections[x].dataSocket.dataListener.timeStart;
  48.       break;
  49.     }
  50.   }
  51.  
  52.   if (bytesTotal) {
  53.     gStatusBarClear   = false;
  54.     var timeElapsed   = ((new Date()) - timeStart) / 1000;
  55.     timeElapsed       = timeElapsed != 0 ? timeElapsed : 1;                         // no dividing by 0
  56.     var averageRate   = ((bytesTransferred - bytesPartial) / 1024 / timeElapsed).toFixed(2);
  57.     averageRate       = averageRate != 0 ? averageRate : "0.1";                     // no dividing by 0
  58.     var timeRemaining = (bytesTotal - bytesTransferred) / 1024 * (1 / averageRate);
  59.     averageRate       = averageRate.replace(/\./g, gStrbundle.getString("decimal")) + " " + gStrbundle.getString("kbsec");
  60.     var filesleft     = 0;
  61.  
  62.     for (var x = 0; x < gMaxCon; ++x) {
  63.       if (!gConnections[x].isConnected) {
  64.         continue;
  65.       }
  66.  
  67.       var filesleftTrans = 0;
  68.  
  69.       if (gConnections[x].dataSocket && gConnections[x].dataSocket.progressEventSink.bytesTotal) {
  70.         filesleftTrans = gConnections[x].dataSocket.progressEventSink.bytesUploaded;
  71.       } else if (gConnections[x].dataSocket && gConnections[x].dataSocket.dataListener.bytesTotal) {
  72.         filesleftTrans = gConnections[x].dataSocket.dataListener.bytesDownloaded;
  73.       }
  74.  
  75.       filesleft += filesleftTrans ? 1 : 0;
  76.     }
  77.  
  78.     for (var x = 0; x < gMaxCon; ++x) {
  79.       if (!gConnections[x].isConnected) {
  80.         continue;
  81.       }
  82.  
  83.       for (var y = 0; y < gConnections[x].eventQueue.length; ++y) {
  84.         if (gConnections[x].eventQueue[y].cmd in {"RETR": 1, "APPE": 1, "STOR": 1}) {
  85.           ++filesleft;
  86.         }
  87.  
  88.         if (filesleft > 100) {                  // save on CPU cycles, going through entire eventQueue can be intense
  89.           filesleft = "100+";
  90.           break;
  91.         }
  92.       }
  93.     }
  94.  
  95.     gStatusBytes.label     = commas(bytesTransferred) + " / " + commas(bytesTotal) + ' - ' + gStrbundle.getFormattedString("filesleft", [filesleft]);
  96.     var hours              = parseInt( timeElapsed / 3600);
  97.     var min                = parseInt((timeElapsed - hours * 3600) / 60);
  98.     var sec                = parseInt( timeElapsed - hours * 3600 - min * 60);
  99.     gStatusElapsed.label   = zeros(hours) + ":" + zeros(min) + ":" + zeros(sec);
  100.  
  101.     hours                  = parseInt( timeRemaining / 3600);
  102.     min                    = parseInt((timeRemaining - hours * 3600) / 60);
  103.     sec                    = parseInt( timeRemaining - hours * 3600 - min * 60);
  104.     gStatusRemaining.label = zeros(hours) + ":" + zeros(min) + ":" + zeros(sec);
  105.  
  106.     gStatusRate.label      = averageRate;
  107.     var total              = bytesTotal != 0 ? bytesTotal : 1;                      // no dividing by 0
  108.     var progress           = parseInt(bytesTransferred / total * 100) + "%";
  109.     gStatusMeter.setAttribute("mode", "determined");
  110.     gStatusMeter.setAttribute("value", progress);
  111.     document.title         = progress + " @ " + averageRate + " - " + (gAccount ? gAccount : gFtp.host) + " - FireFTP";
  112.  
  113.   } else {
  114.     var filesleft = 0;                                                              // update status bar to list how many files are left
  115.     var status    = "";
  116.  
  117.     for (var x = 0; x < gMaxCon; ++x) {
  118.       if (!gConnections[x].isConnected) {
  119.         continue;
  120.       }
  121.  
  122.       for (var y = 0; y < gConnections[x].eventQueue.length; ++y) {
  123.         if (gConnections[x].eventQueue[y].cmd in {"RETR": 1, "RETR2": 1, "APPE": 1, "APPE2": 1, "STOR": 1, "STOR2": 1,
  124.                                                   "DELE": 1, "RMD": 1, "get": 1, "reget": 1, "put": 1, "reput": 1}) {
  125.           ++filesleft;
  126.         }
  127.  
  128.         if (filesleft > 100) {                  // save on CPU cycles, going through entire eventQueue can be intense
  129.           filesleft = "100+";
  130.           break;
  131.         }
  132.       }
  133.     }
  134.  
  135.     if (filesleft) {
  136.       status = gStrbundle.getString("working") + ' - ' + gStrbundle.getFormattedString("filesleft", [filesleft]);
  137.       gStatusMeter.setAttribute("mode", "undetermined");
  138.       gStatusBarClear = false;
  139.     } else if (gFtp.eventQueue.length) {
  140.       status = gFtp.eventQueue[0].cmd == "welcome" ? gStrbundle.getString("connecting") : gStrbundle.getString("working");
  141.       gStatusMeter.setAttribute("mode", "undetermined");
  142.       gStatusBarClear = false;
  143.     } else if (gProcessing) {
  144.       status = gStrbundle.getString("working");
  145.       gStatusMeter.setAttribute("mode", "undetermined");
  146.       gStatusBarClear = false;
  147.     } else if (!gStatusBarClear) {
  148.       gStatusMeter.setAttribute("mode", "determined");
  149.       gStatusBarClear = true;
  150.     } else if (gStatusBarClear && !gFtp.isReconnecting) {
  151.       return;
  152.     }
  153.  
  154.     if (!gFtp.isReconnecting && !gFtp.isConnected && !$('abortbutton').disabled) {
  155.       $('abortbutton').disabled = true;
  156.     }
  157.  
  158.     if (gFtp.isReconnecting) {
  159.       if (gFtp.reconnectsLeft) {
  160.         status = gStrbundle.getFormattedString("reconnect", [gFtp.reconnectInterval, gFtp.reconnectsLeft]);
  161.         gStatusMeter.setAttribute("mode", "undetermined");
  162.       } else {
  163.         status = "";
  164.         gStatusMeter.setAttribute("mode", "determined");
  165.       }
  166.     }
  167.  
  168.     gStatusBytes.label = status;
  169.  
  170.     if (!gFtp.isConnected) {
  171.       document.title = (gFtp.isReconnecting ? (status + " - ") : "") + "FireFTP";
  172.       gStatusBarClear = false;
  173.     } else {
  174.       document.title = status + (status == "" ? "" : " - ") + (gAccount ? gAccount : gFtp.host) + " - FireFTP";
  175.     }
  176.  
  177.     gStatusElapsed.label   = "";
  178.     gStatusRemaining.label = "";
  179.     gStatusRate.label      = "";
  180.     gStatusMeter.setAttribute("value", "0%");
  181.   }
  182. }
  183.